Software Defined Networking (SDN) is an approach to computer networking that allows network administrators to manage network services through abstraction of lower-level functionality. This is done by decoupling the system that makes decisions about where traffic is sent (the control plane) from the underlying systems that forward traffic to the selected destination (the data plane). In such a system, a network controller has the role of the control plane and is coupled to one or more network elements have the role of the data plane. The network controller communicates with the network elements using a SDN protocol (e.g. OpenFlow). The network controller, acting as the control plane, may then program the data plane on the network elements by causing packet handling rules to be installed on the network elements. These packet handling rules may have criteria to match various packet types as well as actions that may be performed on those packets. For example, the network controller may program the network elements to forward packets with a specific destination address a certain way in the network.
In some cases, the network controller may also request network elements to forward packets to the network controller. This may be so that the network controller may analyze the content of the packets, as it may not have encountered the type of packet or the content in the packet previously. This may also be so that an application in an application layer coupled to the network controller may be able to make use of the packet. However, the current communication of packet data between the network elements and the network controller is data intensive and thus a more optimized solution is desirable.